package com.tianji.common.domain.dto;

import lombok.Data;

import java.util.concurrent.Delayed;
import java.util.concurrent.TimeUnit;

@Data
public class DelayedTask<T> implements Delayed {

    private T data;
    private long deadline;

    public DelayedTask(T data, int delaySecond) {//当前时间是：10：00：00 过期时间是10秒
        // deadline = 10：00：10
        this.data = data;
        this.deadline = System.currentTimeMillis() + delaySecond * 1000;
    }

    // 返回当前元素还剩多少有效时间
    @Override
    public long getDelay(TimeUnit unit) {
        long left = deadline - System.currentTimeMillis();  //现在时间是10：00：05， left = 5
        if (left < 0) {                                        //现在时间是10：00：11， left = -1
            left = 0;
        }
        return left;
    }

    /**
     * 比较两个元素的剩余有效期，有效期短的优先出队
     */
    @Override
    public int compareTo(Delayed o) {
        return (int) (this.deadline - ((DelayedTask) o).deadline);
    }

}